﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;


using System.Threading.Tasks;

using FXnaInfrastructure;

using DotSpatial.Topology;




namespace NSCore
{

    /// <summary>
    /// 用于表示具体执行计算的核心
    /// 这里根据参数构建不同的算法，并提供一些基本数据
    /// 这里提供单一接受点的封装
    /// </summary>
    public  class MathCore
    {

        public MathCore(NSData data)
        {

            _formula = new MathFormula();


            //根据参数配置公式

            this._formula.AAtm = new AAtm(data);

            this._formula.ADiv = new ADiv();

            this._formula.ABar = new ABar(data);








 
        }


        MathFormula _formula;

        NSData _data;



        protected void Compute(MathReceptor receptor,MathPS ps)
        {

            //需要根据已知的声功率类型判断

            if (ps.IsReference)
            {


            }

            else
            {


                double dw = ps.Lw;

                //根据公式执行计算，得到总的衰减值

                double subLevel = this._formula.Compute(receptor,ps);


                double finalResult = dw - subLevel;


                receptor.AddContribueNL(finalResult);




 

            }


          


           


        }




      

        public  void ComputeReceptor(MathReceptor receptor,List<MathPS> lstPs)
        {
            //这里我们虚拟一个源，用于测试

            foreach (MathPS item in lstPs)
            {

                this.Compute(receptor,item);

               

            }

            


 
        }







        public  void Compute(List<MathReceptor> list,NSContext context)
        {


            //并行计算部分

            Parallel.ForEach(list, (r) =>
            {


                //执行关系转换
              

                this.ComputeReceptor(r,context.Sources.LstMathPs);




            });
           
 

        }


    }
}
